package are.web;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class ManejadorPlaca {

	private db conexion = null;
	private Placa placa;
	
	public static final int FILTRO_ANIO = 1;
	public static final int FILTRO_PAIS = 2;
	public static final int FILTRO_TIPO_REGISTRO = 3;

	public ManejadorPlaca(db conexion) {
		super();
		this.conexion = conexion;
		this.placa = new Placa();
	}
	public ManejadorPlaca(db conexion, Placa placa) {
		super();
		this.conexion = conexion;
		this.placa = placa;
	}
	public db getConexion() {
		return conexion;
	}
	public void setConexion(db conexion) {
		this.conexion = conexion;
	}
	public Placa getPlaca() {
		return placa;
	}
	public void setPlaca(Placa placa) {
		this.placa = placa;
	}

	public boolean add() throws SQLException{
		boolean result = false;

			String sql = "insert into placas (codigo,matricula,peso,peso_liquido," +
					"anio_fabricacion,pais_fabricacion,fecha_registro,recurso_registro," +
					"tipo_registro,latitud,longitud) values(?,?,?,?,?,?,sysdate(),?,?,?,?)";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1, placa.getCodigo());
			pst.setString(2, placa.getMatricula());
			pst.setString(3, placa.getPeso());
			pst.setString(4, placa.getPliquido());
			pst.setString(5, placa.getAnio());
			pst.setString(6, placa.getPais());
			pst.setString(7, placa.getRecurso());
			pst.setString(8, placa.getTipo_registro());
			pst.setString(9, placa.getLatitud());
			pst.setString(10, placa.getLongitud());
			
			if (conexion.Update(pst) > 0) {
				conexion.Commit();
				result = true;
			}
			
		
		return result;
	}
	
	public boolean update(String key) throws SQLException{
		boolean result = false;

			String sql = "update placas set codigo=?,matricula=?,peso=?,peso_liquido=?," +
					"anio_fabricacion=?,pais_fabricacion=?,recurso_registro=?," +
					"tipo_registro=?,latitud=?,longitud=? where codigo=?";
			
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1, placa.getCodigo());
			pst.setString(2, placa.getMatricula());
			pst.setString(3, placa.getPeso());
			pst.setString(4, placa.getPliquido());
			pst.setString(5, placa.getAnio());
			pst.setString(6, placa.getPais());
			pst.setString(7, placa.getRecurso());
			pst.setString(8, placa.getTipo_registro());
			pst.setString(9, placa.getLatitud());
			pst.setString(10, placa.getLongitud());
			pst.setString(11, key);
			
			if (conexion.Update(pst) > 0) {
				conexion.Commit();
				result = true;
			}
			
		return result;
	}
	public boolean remove(String key) throws SQLException {
		boolean result = false;

			String sql = "delete from placas where codigo=?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			if (conexion.Update(pst) > 0) {
				conexion.Commit();
				result = true;
			}
			

		return result;	
	}
	
	
	public boolean exist(String key) throws SQLException {
		boolean result = false;

			String sql = "select codigo from placas where codigo = ?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			ResultSet rs = conexion.Query(pst);
			if (rs.next()) {
				result = true;
			}
			rs.close();
			
		
		return result;	
	}
	
	public boolean Find(String key) throws SQLException {
		boolean result = false;

			String sql = "select * from placas where codigo=?";
			java.sql.PreparedStatement pst = conexion.getConnection().prepareStatement(sql);
			pst.setString(1,key);
			ResultSet rs = conexion.Query(pst);
			if (rs.next()) {
				placa = new Placa();
				placa.setCodigo(rs.getString("codigo"));
				placa.setMatricula(rs.getString("matricula"));
				placa.setPeso(rs.getString("peso"));
				placa.setPliquido(rs.getString("peso_liquido"));
				placa.setAnio(rs.getString("anio_fabricacion"));
				placa.setPais(rs.getString("pais_fabricacion"));
				placa.setTipo_registro(rs.getString("tipo_registro"));
				placa.setRecurso(rs.getString("recurso_registro"));
				placa.setLatitud(rs.getString("latitud"));
				placa.setLongitud(rs.getString("longitud"));
				placa.setFecha(rs.getString("fecha_registro"));
				result = true;
			}
			rs.close();
			
		return result;	
	}
	
	public ArrayList<Placa> list() throws SQLException {
		ArrayList<Placa> placas = new ArrayList<Placa>();
		
			String sql = "select * from placas order by codigo";
			ResultSet rs  = conexion.Query(sql);
			while(rs.next()) {
				Placa placa = new Placa();
				placa.setCodigo(rs.getString("codigo"));
				placa.setMatricula(rs.getString("matricula"));
				placa.setPeso(rs.getString("peso"));
				placa.setPliquido(rs.getString("peso_liquido"));
				placa.setAnio(rs.getString("anio_fabricacion"));
				placa.setPais(rs.getString("pais_fabricacion"));
				placa.setTipo_registro(rs.getString("tipo_registro"));
				placa.setRecurso(rs.getString("recurso_registro"));
				placa.setLatitud(rs.getString("latitud"));
				placa.setLongitud(rs.getString("longitud"));
				placa.setFecha(rs.getString("fecha_registro"));
				placas.add(placa);
			}
			rs.close();
		
		return placas;
	}
	
	public ArrayList<Placa> list(int campo_filtro, String filtro) throws SQLException {
		ArrayList<Placa> placas = new ArrayList<Placa>();

			String sql = "select * from placas ";
			
			switch(campo_filtro) {
			case FILTRO_ANIO:
				sql += " where anio_fabricacion = '" + filtro + "'";
			break;
			case FILTRO_PAIS:
				sql += " where pais_fabricacion = '" + filtro + "'";
			break;
			case FILTRO_TIPO_REGISTRO:
				sql += " where tipo_registro = '" + filtro + "'";
			break;
			}
			sql += " order by codigo";
			ResultSet rs  = conexion.Query(sql);
			while(rs.next()) {
				Placa placa = new Placa();
				placa.setCodigo(rs.getString("codigo"));
				placa.setMatricula(rs.getString("matricula"));
				placa.setPeso(rs.getString("peso"));
				placa.setPliquido(rs.getString("peso_liquido"));
				placa.setAnio(rs.getString("anio_fabricacion"));
				placa.setPais(rs.getString("pais_fabricacion"));
				placa.setTipo_registro(rs.getString("tipo_registro"));
				placa.setRecurso(rs.getString("recurso_registro"));
				placa.setLatitud(rs.getString("latitud"));
				placa.setLongitud(rs.getString("longitud"));
				placa.setFecha(rs.getString("fecha_registro"));
				placas.add(placa);
			}
			rs.close();
		
		return placas;	
	}
	
	public ArrayList<Placa> list(String filtro) throws SQLException {
			if (filtro.isEmpty()) {
				throw new SQLException("Cadena de filtro no puede estar vacia");
			}
			
			ArrayList<Placa> placas = new ArrayList<Placa>();

			String sql = "select * from placas ";
			sql += " where " + filtro ;		
			sql += " order by codigo";
			ResultSet rs  = conexion.Query(sql);
			while(rs.next()) {
				Placa placa = new Placa();
				placa.setCodigo(rs.getString("codigo"));
				placa.setMatricula(rs.getString("matricula"));
				placa.setPeso(rs.getString("peso"));
				placa.setPliquido(rs.getString("peso_liquido"));
				placa.setAnio(rs.getString("anio_fabricacion"));
				placa.setPais(rs.getString("pais_fabricacion"));
				placa.setTipo_registro(rs.getString("tipo_registro"));
				placa.setRecurso(rs.getString("recurso_registro"));
				placa.setLatitud(rs.getString("latitud"));
				placa.setLongitud(rs.getString("longitud"));
				placa.setFecha(rs.getString("fecha_registro"));
				placas.add(placa);
			}
			rs.close();
		
		return placas;	
	}
	
	
}